#ifndef DATAFORMAT_H
#define DATAFORMAT_H

#include <QMap>
#include <QObject>
#include <QString>
#include <QVector>
#include <QMetaType>

const QMap<QString, QString> AIR_QUALITY_TIPS = {
    {"优",  QObject::tr("空气清新，适宜开窗通风和户外活动。")},
    {"良",  QObject::tr("空气良好，敏感人群请注意防护，减少长时间户外活动。")},
    {"污染", QObject::tr("空气污染，请关闭门窗并佩戴N95口罩。")},
    {"未知", QObject::tr("空气质量数据异常，请做好常规防护。")}
};

// 基础信息类
class BaseInfo {
    Q_GADGET

public:
    QString date;            // 日期
    QString week;            // 星期
    QString weatherType;     // 天气类型
    QString windDirection;   // 风向
    QString windPower;       // 风力
    QString iconType;        // 存放获取到的icon信息
    double tempHigh = 0.0;   // 最高温度（单位：℃）
    double tempLow = 0.0;    // 最低温度（单位：℃）
    double averageTemp = 0.0;// 平均温度（单位：℃）
    double humidity = 0.0;   // 湿度
};

// 当日天气信息
class CurrentDay : public BaseInfo {
    Q_GADGET

public:
    QString city;            // 城市名称
    int pm25 = 0;            // PM2.5浓度
    QString airQuality;      // 空气质量等级
    QString lifeTips;        // 生活建议

    // 空气质量计算
    void calculateAirQuality() {
        if (pm25 <= 35) airQuality = "优";
        else if (pm25 <= 75) airQuality = "良";
        else airQuality = "污染";

        lifeTips = AIR_QUALITY_TIPS.value(airQuality, "未知空气质量等级");
    }
};

// 未来七日信息
class FutureDays : public BaseInfo {
    Q_GADGET
    // 直接继承 BaseInfo 的所有信息字段
};

// 注册元类型以支持Qt信号槽传递
Q_DECLARE_METATYPE(CurrentDay)
Q_DECLARE_METATYPE(FutureDays)
Q_DECLARE_METATYPE(QVector<FutureDays>)

#endif // DATAFORMAT_H
